Skip to content

fix(portal): replace display-name editing with a Handle row - #6

Merged
kipavy merged 3 commits into
mainfrom
fix/remove-display-name
Aug 16, 2026
Merged

fix(portal): replace display-name editing with a Handle row#6
kipavy merged 3 commits into
mainfrom
fix/remove-display-name

Conversation

@kipavy

@kipavy kipavy commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

The portal was never updated when the app moved to handles, so it still had a live Display name editor calling PUT /v1/auth/display-name — a route VoltiusApp/server#5 deletes. Once that ships, Save 404s while the user believes they renamed themselves.

Of the 15 /v1/... routes the portal calls, that is the only one absent from the server after the change. The staleness is exactly one row.

Changes

  • Removes the Display name row, updateDisplayName, and everything left dead by them
  • Adds a Handle row above Email: @handle + Copy for everyone; Change handle modal for Pro+, matching the page's existing Email/password modals
  • Free users get no edit button and two lines explaining that custom handles are paid and that their generated handle still reaches them
  • Error mapping: 402 needs Pro · 409 taken · 422 invalid · 429 renamed within 30 days
  • The modal states the 3–30 char rules and the 30-day rename limit before the user commits
  • Gates on current tier, never on handle_is_custom, so a lapsed Pro keeps their custom handle and loses only renaming — matching the server's effective_tier_for_user

⚠️ Deploy this FIRST

This is the only piece safe to land before the server and unsafe after. It is independently deployable — PUT /v1/users/me/handle has been live since the unified-invite server shipped, so this needs nothing from server#5.

⚠️ Not visually verified

pnpm build is clean (Next typecheck included) but this repo has no test suite, and the handle row has not been rendered in a browser. Review alone found two Important bugs in it — a successful rename reported as a failure, and a leading @ rejected locally that the server strips — both fixed. Worth a look before merge.

Note

A follow-up will make custom handles free for anyone with a verified email (the 14-day Pro trial makes the current paywall a no-op). The Pro-gating here is correct against today's server.

kipavy added 3 commits August 15, 2026 20:23
The server deletes PUT /v1/auth/display-name. Drop the account page's
Display name row and updateDisplayName helper rather than repoint it
at handle-claim (out of scope). Email row already covers identity.
Replaces the removed display-name editor's slot with a Handle row:
viewable by everyone with a Copy button, editable via a Change handle
modal for Pro and above. Free users see the value plus a note that
they're still reachable. A lapsed-Pro user keeps their custom handle
and the edit gate is only ever on current tier, never handle_is_custom.
ChangeHandleModal: the post-rename getMe() refetch shared a try with
updateHandle(), so a network blip on the refetch reported a successful
rename as "Failed to update handle." Give it its own try/catch and
fall back to the trimmed input on failure. Also strip a leading "@"
before validating, since the server accepts it and the UI's own
subtitle models the handle as "@name".

page.tsx: guard the Pro-only "Change handle" button against the null
tier during initial load, and hide Copy when there is no handle to
copy.
@vercel

vercel Bot commented Aug 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
voltius Ready Ready Preview Aug 16, 2026 8:33am
voltius-portal Ready Ready Preview Aug 16, 2026 8:33am

@kipavy
kipavy merged commit 099d2bf into main Aug 16, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant